package com.qkjia.rabbitmq.routing;

import com.rabbitmq.client.*;

import java.io.IOException;

/**
 * rabbitmq routing模式消费者
 * @author zhaoqiankun
 * @date 2021/8/19
 */
public class Consumer2 {
    public static void main(String[] args) throws Exception {

        //1.创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //2. 设置参数
        factory.setHost("localhost");
        //ip  默认值 localhost
        factory.setPort(5672);
        //端口  默认值 5672
        factory.setVirtualHost("/");
        //虚拟机 默认值/
        factory.setUsername("guest");
        //用户名 默认 guest
        factory.setPassword("guest");

        //密码 默认值 guest
        //3. 创建连接 Connection
        Connection connection = factory.newConnection();
        //4. 创建Channel
        Channel channel = connection.createChannel();

        String queue2Name = "test_direct_queue2";
      /*
        basicConsume(String queue, boolean autoAck, Consumer callback)
        参数：
            1. queue：队列名称
            2. autoAck：是否自动确认
            3. callback：回调对象
         */
        // 接收消息
        Consumer consumer = new DefaultConsumer(channel){
            /*
               回调方法，当收到消息后，会自动执行该方法
               1. consumerTag：标识
               2. envelope：获取一些信息，交换机，路由key...
               3. properties:配置信息
               4. body：数据
            */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("body："+new String(body));
                System.out.println("将日志信息存储到数据库.....");
            }
        };
        channel.basicConsume(queue2Name,true,consumer);
    }
}